package org.miniframework.mvc.processor.impl;

import org.miniframework.mvc.RequestProcessorChain;
import org.miniframework.mvc.processor.RequestProcessor;

/**
 * 请求预处理，包括编码以及路径处理
 */
public class PreRequestProcessor implements RequestProcessor {

    /**
     * 该方法主要对请求的方法进行规范法,设置编码为utf-8,所有的请求都会去执行他,且返回为true.
     * @param chain
     * @return
     * @throws Exception
     */
    @Override
    public boolean process(RequestProcessorChain chain) throws Exception {
        // 同一编码 utf-8 只能解决post形式, get形式需要tomcat进行设置
        chain.getRequest().setCharacterEncoding("UTF-8");
        //http://localhost:8080/miniframework/  controller 一般处理的请求格式为 /aa/bb 类型 或者 / 类型,
        // 所以这里需要把path
        String path = chain.getRequestPath();
        // 当请求为 http://localhost:8080/miniframework 时 path=null 需要设置为/ path
        if (path == null){
            chain.setRequestPath("/");
        }
        // 将 /ab/abdb/  规范为 /ab/abdb 同时 对于/ 这类请求不需要管
        if (path != null && path.length() > 1 && path.endsWith("/")){
            chain.setRequestPath(path.substring(0,path.length() - 1));
        }
        return true;
    }
}
